import os
import sys
from pathlib import Path

# 获取项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent

# 根据操作系统确定SQLite数据库URL前缀
# Windows系统使用三个斜杠，Unix-like系统使用四个斜杠
SQLITE_PREFIX = 'sqlite:///' if sys.platform.startswith('win') else 'sqlite:////'


class BaseConfig:
    """
    基础配置类，包含所有环境共用的配置项
    """
    # 密钥用于加密session等安全相关功能
    # 在生产环境中应该从环境变量获取，开发环境中使用默认值
    SECRET_KEY = os.getenv('SECRET_KEY', 'dev')


class DevelopmentConfig(BaseConfig):
    """
    开发环境配置类
    """
    # 开发环境数据库URI，使用本地SQLite数据库
    SQLALCHEMY_DATABASE_URI = SQLITE_PREFIX + str(BASE_DIR / 'data-dev.db')


class TestingConfig(BaseConfig):
    """
    测试环境配置类
    """
    # 启用测试模式
    TESTING = True
    # 使用内存数据库以提高测试速度
    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'


class ProductionConfig(BaseConfig):
    """
    生产环境配置类
    """
    # 生产环境数据库URI，可以从环境变量获取，如果没有则使用本地SQLite数据库
    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL', SQLITE_PREFIX + str(BASE_DIR / 'data.db'))


# 配置字典，用于根据环境名称获取对应的配置类
config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig
}